The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
Digital video streaming over packet-based networks is a common method for user computers to view videos that are stored on different devices. Video streaming allows user computers to access and watch a larger number of videos than could be stored on the user computer. Generally, a video is stored on a separate server computer and is sent to client computing devices for viewing.
Often, a client computing device is unable to efficiently stream a video stored in its source formatting. For example, a client computing device may be unable to download a file as fast as the file is played, thereby forcing the streamed video to pause every time the playback of the file catches up to the end of the downloaded portion of the file. The ability of the client computing device to stream videos may be based on an internet connection, the type of device, the hardware of the device, and/or any other activities being performed by the device. A computer that is currently downloading a 16 GB file will generally have lower streaming capabilities than a similarly situated computer that is not downloading a 16 GB file.
Due to the inability of many computing devices to stream video files in their source formatting, video files are often transcoded into different formats for streaming by different client computing devices. Transcoding generally refers to the conversion of a digital file from one encoding to another encoding. Transcoding video files may refer to changing the format of a video file in order to ensure compatibility with a client computing device, changing the codec of a video file, changing a bitrate of a file, such as by compressing the file, and/or changing a resolution of a file.
Many streaming services will store multiple versions of digital media files that have been transcoded into different formats, bitrates, and/or resolutions. For example, a video may be transcoded into transcoded versions of the video at 1080p, 720p, and 480p bitrates and stored on a server computer. If a client computing device requests a stream at 720p, the server computer sends the 720p version of the video to the client computing device.
Storing multiple copies of each video tends to be efficient for delivering videos that are frequently viewed. For example, a video streaming service that receives hundreds of requests for a single video during a day likely has increased capabilities to store multiple versions of each video on a server computer. The same may not be true for a personal server computer which is accessed by a few people in a household and receives requests for access to particular video files rarely. In such cases, storing multiple copies of every single video file becomes a large drain on the storage of the personal server computer. Additionally, much of that storage may be unnecessary as some files may never be accessed or may be accessed less than a handful of times.
While the server computer could store one transcoded version of each file based on the requesting devices, doing so does not take into account changing needs over time. Due to changes in connectivity, a client computing device may lose the capability to download or stream files of a certain size without causing delay in the playback of the files. Servers that store multiple versions of the same file are capable of adapting by a streaming a lower quality version of the file when the client's connection is negatively impacted. A server that does not store multiple transcoded versions of a file does not retain the capability to adapt to changes in connectivity of the client device.
Additionally, the server computer may be unable to provide the highest quality video file that a client computing device is capable of effectively viewing. Thus, a user may be stuck viewing a low quality version of a video file because higher quality transcoded versions of the video file are unavailable.
Thus, there is a need for a method for providing transcoded versions of a digital media file that can adapt to capabilities of a client computing device without requiring the storage of multiple transcoded versions of each digital media file on a server computer. Such a technique would be useful for on-the-fly transcoding of video files and/or portions of video files.